import { UserLevel } from "../shared/face";
import sdk from "../core";
import { URL } from "url";
import gameCfg from "../gameCfg";

/**
 * 基础服务
 * 负责处理用户基本信息相关的业务逻辑
 */
export class BaseService {
    
    /**
     * 验证用户名格式
     * @param name 用户名
     * @returns 验证结果
     */
    static validateUserName(name: string): {
        valid: boolean;
        message: string;
    } {
        const namePattern = /^[a-zA-Z\u4e00-\u9fa50-9]+$/;
        
        if (!namePattern.test(name)) {
            return {
                valid: false,
                message: '名字只能包含中文、字母或数字'
            };
        }
        
        if (name.length < 2) {
            return {
                valid: false,
                message: '名字长度不能小于2个字符'
            };
        }
        
        if (name.length > 8) {
            return {
                valid: false,
                message: '名字长度不能大于8个字符'
            };
        }
        
        return {
            valid: true,
            message: ''
        };
    }
    
    /**
     * 检查用户名是否可用
     * @param name 用户名
     * @returns 是否可用
     */
    static isNameAvailable(name: string): boolean {
        return sdk.user.isNameAvailable(name);
    }
    
    /**
     * 更新用户名
     * @param playerId 玩家ID
     * @param oldName 旧名称
     * @param newName 新名称
     * @returns 更新结果
     */
    static updateUserName(playerId: string, oldName: string, newName: string): {
        success: boolean;
        message: string;
    } {
        try {
            // 验证新名称格式
            const validation = this.validateUserName(newName);
            if (!validation.valid) {
                return {
                    success: false,
                    message: validation.message
                };
            }
            
            // 检查名称是否已被使用
            if (!this.isNameAvailable(newName)) {
                return {
                    success: false,
                    message: '该名字已被使用，请选择其他名字'
                };
            }
            
            // 更新用户名记录
            sdk.user.updatePlayerName(playerId, oldName, newName);
            
            return {
                success: true,
                message: '改名成功: ' + newName
            };
        } catch (error) {
            console.error('更新用户名失败:', error);
            return {
                success: false,
                message: '改名失败，请稍后重试'
            };
        }
    }
    
    /**
     * 获取用户权限级别显示名称
     * @param level 权限级别
     * @returns 显示名称
     */
    static getUserLevelDisplayName(level: UserLevel): string {
        return UserLevel[level];
    }
    
    /**
     * 检查用户是否有管理员权限
     * @param level 权限级别
     * @returns 是否有管理员权限
     */
    static hasAdminPermission(level: UserLevel): boolean {
        return level > UserLevel.玩家;
    }
    
    /**
     * 检查用户是否有开发者权限
     * @param level 权限级别
     * @returns 是否有开发者权限
     */
    static hasDeveloperPermission(level: UserLevel): boolean {
        return level === UserLevel.开发者;
    }
    
    /**
     * 获取用户状态信息
     * @param userInfo 用户信息
     * @returns 状态信息
     */
    static getUserStatus(userInfo: {
        id: string;
        nickName: string;
        sys_leve: UserLevel;
        show: string;
    }): {
        userId: string;
        displayName: string;
        hasAdminPermission: boolean;
        hasDeveloperPermission: boolean;
        levelDisplayName: string;
        hasCustomShow: boolean;
    } {
        return {
            userId: userInfo.id,
            displayName: userInfo.nickName,
            hasAdminPermission: this.hasAdminPermission(userInfo.sys_leve),
            hasDeveloperPermission: this.hasDeveloperPermission(userInfo.sys_leve),
            levelDisplayName: this.getUserLevelDisplayName(userInfo.sys_leve),
            hasCustomShow: userInfo.show !== 'https://dew-1251587647.cos.ap-guangzhou.myqcloud.com/show_player/1.png'
        };
    }
    

    
    /**
     * 设置用户展示图片
     * @param show 展示图片URL
     * @returns 验证结果
     */
    static setUserShow(show: string): {
        valid: boolean;
        message: string;
    } {
        try {
            // 简单的URL验证
            new URL(show);
            return {
                valid: true,
                message: '展示图片设置成功'
            };
        } catch (error) {
            return {
                valid: false,
                message: '展示图片URL格式不正确'
            };
        }
    }
    
    /**
     * 生成用户基本信息卡片数据
     * @param userInfo 用户信息
     * @returns 卡片数据
     */
    static generateUserInfoCard(userInfo: {
        id: string;
        nickName: string;
        sys_leve: UserLevel;
        show: string;
    }): {
        title: string;
        lines: string[];
        hasAdminInfo: boolean;
    } {
        const status = this.getUserStatus(userInfo);
        const lines: string[] = [];
        
        // 只有管理员以上权限才显示权限信息
        if (status.hasAdminPermission) {
            lines.push(`权限: ${status.levelDisplayName}`);
        }
        
        lines.push(`UID: ${status.userId}`);
        
        return {
            title: '基础信息',
            lines,
            hasAdminInfo: status.hasAdminPermission
        };
    }
} 